// pages/chat/chat.js
const ollamaAPI = require('../../utils/ollamaApi.js');

Page({
  /**
   * 页面的初始数据
   */
  data: {
    messages: [], // 聊天消息列表
    inputText: '', // 输入框文本
    isTyping: false, // 机器人是否正在输入
    scrollTop: 0, // 滚动位置
    scrollIntoView: '', // 滚动到指定元素
    connectionStatus: '在线', // 连接状态
    currentTime: '',
    userAvatar: 'https://img.icons8.com/bubbles/100/user.png',
    quickReplies: [ // 快捷回复
      '我想买车',
      '我想卖车',
      '查看订单',
      '联系客服',
      '车辆评估'
    ]
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    console.log('聊天页面加载');
    this.initChat();
    this.updateCurrentTime();
    
    // 加载用户头像
    this.loadUserAvatar();
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 自动聚焦输入框
    setTimeout(() => {
      this.setData({
        autoFocus: true
      });
    }, 500);
    
    // 页面显示时滚动到底部
    setTimeout(() => {
      this.scrollToBottom();
    }, 300);
  },

  // 初始化聊天
  initChat() {
    this.setData({
      connectionStatus: '在线',
      currentTime: this.formatTime(new Date())
    });
  },

  // 加载用户头像
  loadUserAvatar() {
    try {
      const userInfo = wx.getStorageSync('userInfo');
      if (userInfo && userInfo.avatar) {
        this.setData({
          userAvatar: userInfo.avatar
        });
      }
    } catch (e) {
      console.error('加载用户头像失败:', e);
    }
  },

  // 更新当前时间
  updateCurrentTime() {
    this.setData({
      currentTime: this.formatTime(new Date())
    });
  },

  // 格式化时间
  formatTime(date) {
    const hours = date.getHours().toString().padStart(2, '0');
    const minutes = date.getMinutes().toString().padStart(2, '0');
    return `${hours}:${minutes}`;
  },

  // 输入框内容变化
  onInputChange(e) {
    this.setData({
      inputText: e.detail.value
    });
  },

  // 发送消息
  sendMessage() {
    const text = this.data.inputText.trim();
    if (!text || this.data.isTyping) {
      return;
    }

    // 添加用户消息
    const userMessage = {
      id: Date.now(),
      type: 'user',
      content: text,
      time: this.formatTime(new Date())
    };

    this.setData({
      messages: [...this.data.messages, userMessage],
      inputText: '',
      isTyping: true
    });

    // 滚动到底部
    this.scrollToBottom();

    // 发送到Ollama API
    this.sendToOllama(text);
  },

  // 选择快捷回复
  selectQuickReply(e) {
    const text = e.currentTarget.dataset.text;
    this.setData({
      inputText: text
    });
    this.sendMessage();
  },

  // 发送消息到Ollama API
  async sendToOllama(userMessage) {
    try {
      console.log('收到用户消息:', userMessage);
      
      // 优先处理简单的问候语和常见问题，提供快速响应
      const quickResponse = this.getQuickResponse(userMessage);
      if (quickResponse) {
        setTimeout(() => {
          const botMessage = {
            id: Date.now(),
            type: 'bot',
            content: quickResponse,
            time: this.formatTime(new Date())
          };

          this.setData({
            messages: [...this.data.messages, botMessage],
            isTyping: false
          });

          this.scrollToBottom();
        }, 300 + Math.random() * 300); // 快速响应
        return;
      }
      
      // 检查API配置
      if (!ollamaAPI.isConfigValid()) {
        console.warn('Ollama API配置无效，使用本地回复');
        throw new Error('Ollama API配置无效');
      }

      // 构建对话历史
      const conversationHistory = this.buildConversationHistory(userMessage);
      
      // 调用Ollama API
      const response = await ollamaAPI.sendMessage(conversationHistory);
      
      // 延迟一下，模拟真实对话
      setTimeout(() => {
        const botMessage = {
          id: Date.now(),
          type: 'bot',
          content: response,
          time: this.formatTime(new Date())
        };

        this.setData({
          messages: [...this.data.messages, botMessage],
          isTyping: false
        });

        this.scrollToBottom();
      }, 500 + Math.random() * 500); // 0.5-1秒随机延迟

    } catch (error) {
      console.error('Ollama API调用失败:', error);
      
      // 显示错误提示并提供备用回复
      setTimeout(() => {
        const errorMessage = {
          id: Date.now(),
          type: 'bot',
          content: ollamaAPI.getErrorResponse(userMessage),
          time: this.formatTime(new Date())
        };

        this.setData({
          messages: [...this.data.messages, errorMessage],
          isTyping: false
        });

        this.scrollToBottom();
      }, 1000);
    }
  },

  // 快速响应常见问题
  getQuickResponse(userMessage) {
    const message = userMessage.toLowerCase().trim();
    
    // 问候语快速响应
    if (message === '你好' || message === '您好' || message === 'hi' || message === 'hello') {
      return '您好！欢迎来到二手车交易平台！我是您的专属智能客服助手，有什么可以帮助您的吗？\n\n我可以为您提供以下服务：\n• 买车咨询和推荐\n• 卖车流程指导\n• 订单查询服务\n• 车辆评估建议\n• 平台功能介绍\n\n请告诉我您的需求，我会尽力为您提供帮助！';
    }
    
    // 其他常见简单问题
    if (message === '谢谢' || message === '感谢') {
      return '不客气！很高兴能为您提供帮助。如果您还有其他问题，随时可以询问我。祝您使用愉快！';
    }
    
    if (message === '再见' || message === '拜拜' || message === 'bye' || message === 'byebye') {
      return '再见！感谢您使用我们的智能客服服务。如果以后有任何问题，欢迎随时回来咨询。祝您生活愉快！';
    }
    
    // 返回null表示需要使用AI处理
    return null;
  },


  // 构建对话历史
  buildConversationHistory(currentMessage) {
    const history = [];

    // 添加历史对话（最近8轮）
    const recentMessages = this.data.messages.slice(-8);
    recentMessages.forEach(msg => {
      history.push({
        role: msg.type === 'user' ? 'user' : 'assistant',
        content: msg.content
      });
    });

    // 添加当前用户消息
    history.push({
      role: 'user',
      content: currentMessage
    });

    return history;
  },


  // 滚动到底部
  scrollToBottom() {
    // 方法1：使用scroll-into-view
    const lastMessageId = this.data.messages.length > 0 ? 
      `msg-${this.data.messages[this.data.messages.length - 1].id}` : '';
    
    // 方法2：计算滚动位置
    const query = wx.createSelectorQuery();
    query.select('.chat-messages').boundingClientRect();
    query.selectViewport().scrollOffset();
    query.exec((res) => {
      if (res[0]) {
        // 设置一个很大的scrollTop值，确保滚动到底部
        this.setData({
          scrollTop: 99999,
          scrollIntoView: lastMessageId
        });
      }
    });
    
    // 延迟重置scrollIntoView，避免冲突
    setTimeout(() => {
      this.setData({
        scrollIntoView: ''
      });
    }, 300);
  },

  // 滚动到底部时触发
  onScrollToLower() {
    console.log('已滚动到底部');
    // 可以在这里添加更多消息加载逻辑
  },

  // 点击机器人头像返回到我的页面
  goBackToMine() {
    wx.navigateBack({
      delta: 1, // 返回上一页
      success: () => {
        console.log('成功返回到我的页面');
      },
      fail: () => {
        // 如果返回失败，则直接跳转到我的页面
        wx.switchTab({
          url: '/pages/mine/mine'
        });
      }
    });
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
    // 页面隐藏时的处理
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    // 页面卸载时的处理
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    // 下拉刷新时重新初始化聊天
    this.initChat();
    wx.stopPullDownRefresh();
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
    return {
      title: '二手车智能客服',
      path: '/pages/index/index',
      imageUrl: 'https://img.icons8.com/fluency/48/bot.png'
    };
  }
});
